import { DcsParamsEntity } from '@/pages/create/createContent/blocks/dcs/store'
import { accountType } from '../global/interface'
import { MixMtEntity } from '@/pages/create/createContent/blocks/mix/store'
import { AiMtEntity } from '@/pages/create/createContent/blocks/ai/store'
import { RecorderMtEntity } from '@/pages/create/createContent/blocks/liveVideo/store'
import { PollMtEntity } from '@/pages/create/createContent/blocks/poll/interface'
import { Vmp } from '@/pages/create/createContent/blocks/vmp/interface'
import { MeetingOrTemplateInterfaceTwallInfo } from '@/pages/create/createContent/blocks/tvwall/interface'

export interface CheckLockParam {
	meeting_moid: string
	meeting_form_key: string
	start_time: string
	end_time: string
	meeting_type: 0 | 1
}

export interface UserEntity {
	account: string
	account_type: accountType
	name: string

	portrait?: string
	conf_e164?: string
	protocol?: 0 | 1 | 2 | 255
	doubleflow?: 0 | 1
	security_level?: 0 | 1
	bitrate?: number
	interactive_mt?: 0 | 1
	parent_id?: string
	e164?: string
}

export interface BasicMeetingParams {
	/** 会议名称 */
	name: string
	/** 预占资源模式 0-关闭, 1-开启, 2-纯转发会议 */
	preoccupy_resource: 0 | 1 | 2
	/** 分机号码 */
	telephone: string
	/** 会议密码 */
	password: string
	/** 移动电话 */
	mobile: string
	/** 0:不加密；2：AES加密；3：国密(SM4)；4：国密(SM1) */
	encrypted_type: 0 | 2 | 3 | 4
	/** 0:传统,1:端口,2:SFU */
	conf_type: 0 | 1 | 2
	/** 成为发言人后立即发起内容共享 */
	doubleflow: 0 | 1
	/** 初始化静音 1是，0否 */
	silence: 0 | 1
	/** 初始化哑音1是，0否 */
	mute: 0 | 1
	/** 归一重整 */
	one_reforming: 0 | 1
	/** 呼叫次数 */
	call_times: number
	/** 呼叫间隔(秒) */
	call_interval: number
	/** 呼叫模式，0-手动；2-自动； */
	call_mode: 0 | 2
	/** 会议安全,0：公开会议；1:隐藏会议 */
	safe_conf: 0 | 1
	/** 会议免打扰，1开启，0关闭 */
	closed_conf: 0 | 1
	/** 会议时长。0：代表永久会议 */
	duration: number
	/** 会议优选协议，0-H323；1-SIP；2-RTC */
	conf_protocol: 0 | 1 | 2
	/** 会议种类 0:普通会议 1:调度会议 2:点对点会议 */
	conf_category: 0 | 1 | 2
	/** 级联方式，0：简单级联，1：合并级联 */
	cascade_mode: 0 | 1
	/** 级联回传带宽参数 */
	cascade_return_para: number
	/** 是否级联回传 */
	cascade_return: 0 | 1
	/** 是否级联上传 */
	cascade_upload: 0 | 1
	/** 是否禁止终端侧解除哑音,1是，0否 */
	force_mute: 0 | 1
	/** 是否开启fec */
	fec_mode: 0 | 1
	/** 是否开启RTC */
	enable_rtc: 0 | 1
	/** 传输加密AES加密密钥 */
	encrypted_key: string
	/** 是否开启全场哑音例外 */
	mute_filter: 0 | 1
	/** 是否开启语言激励 */
	voice_activity_detection: 0 | 1
	/** 是否量子加密 */
	quantum_encryption: 0 | 1
	/** 是否来宾会议室 */
	public_conf: 0 | 1
	/** 是否允许匿名登录 */
	anonymous_mt: 0 | 1
	/** 会议中无终端时，是否自动结会，永久会议时默认为0 */
	auto_end: 0 | 1
	/** 是否支持多流 */
	multi_stream: 0 | 1
	/** 是否支持水印 */
	watermark: 0 | 1
	/** 视频质量,0：质量优先；1：速度优先 */
	video_quality: 0 | 1
	/** 双流权限。0：发言会场；1：任意会场；2：指定会场 */
	dual_mode: 0 | 1 | 2
	/** 语音激励时长 */
	vacinterval: number
	/**终端双向认证 */
	encrypted_auth: 0 | 1
	/**是否超大方 */
	enable_audience: 0 | 1
	/** 智能级联模式 0-不开启;1-按接入位置;2- 按组织架构;*/
	smart_cascade_mode: 0 | 1 | 2
	/** 最大与会终端数，默认传192 */
	max_join_mt: number
	/** 媒体能力 */
	video_formats: {
		/** 码率 */
		bitrate: number
		/** 分辨率 	0-无 2-CIF 3-4CIF 12-720P 13-1080P 14-WCIF 15-W4CIF 16-4K */
		resolution: number
		/** 主流视频格式，默认为3
        1-MPEG;
        2-H.261;
        3-H.263;
        4-H.264_HP;
        5-H.264_BP;
        6-H.265;
        7-H.263+;*/
		format: number
		/** 帧率 */
		frame: number
	}[]
	/** VIP列表 */
	vips: UserEntity[]
	/** 追呼列表 */
	keep_calling_members: UserEntity[]
	/** 发言方 */
	speaker?: UserEntity
	/** 管理方 */
	chairman?: UserEntity
	invite_members: UserEntity[]
	often_mts?: UserEntity[]
	/**
     * 音频格式列表，不填默认支持所有，空列表默认支持所有
        1-G.722;
        2-G711(ULAW);
        3-G.711(ALAW);
        4-G.729;
        5-G.728;
        6-G722.1.C;
        7-MP3;
        8-G.719;
        9-MPEG-4 AAC LC;
        10-MPEG-4 AAC LD;
        11-MPEG-4 AAC LC(stereo);
        12-MPEG-4 AAC LD(stereo);
        13-OPUS;
     */
	audio_formats: number[]
}

/** 模板和会议室公有参数 */
export interface PublicMeetingParams extends BasicMeetingParams {
	/** 会议密级 0-未定义 1-公开 2-内部 3-秘密 4-机密 */
	security_level: 0 | 1 | 2 | 3 | 4
	/** 创建者 */
	creator: UserEntity
	/**被呼方 */
	callee: UserEntity
	ai: AiMtEntity
	tv_wall: MeetingOrTemplateInterfaceTwallInfo
	vmp: Vmp
	mix: MixMtEntity
	poll: PollMtEntity
	dcs: Partial<DcsParamsEntity>
	responsible: UserEntity
	recorder: RecorderMtEntity
	presenter: UserEntity
	caller: UserEntity
	attendances: UserEntity[]
	doubleflow_members: UserEntity[]
	members: UserEntity[]
}

export interface FetchAllMeetingDetail extends PublicMeetingParams {
	/** 会议id */
	meeting_id: string
	/** e164号 */
	conf_id: string
	/** 会议状态
    1-预约;
    2-开始;
    3-结束;
    6-待审批;
    7-审批不通过; */
	state: 1 | 2 | 3 | 6 | 7
	/** 开始时间 例：2023-07-05T15:44:30+08:00*/
	start_time: string
	/** 结束时间 例：2023-07-05T15:44:30+08:00*/
	end_time: string
	/** 创会平台moid，不填则根据用户权限取默认值 */
	platform_id: string
	/** 会议moid */
	meeting_moid: string
	/** 会议概要 */
	brief: string
	/** 所属例会的例会moid */
	regular_meeting_moid: string
	/** 虚拟会议室信息 */
	vmr_name: string
	/** 用户域moid */
	user_domain_moid: string
	/** 直播地址 */
	live_url: string
	/** 直播二维码 */
	qr_code_base64: string
	/** 直播密码 */
	live_password: string
	/** 是否开启短信通知 */
	sms: 0 | 1
	/** 是否开启会议签到 */
	is_signed: 0 | 1
	/** 是否开启纪要 */
	is_recorded: 0 | 1
	/** 是否开启微信通知 */
	wechat: 0 | 1
	/** 是否开启邮件通知 */
	email: 0 | 1
	/** 是否可编辑 */
	is_edit: 0 | 1
	/** 是否追呼 */
	call_chase: 0 | 1
	/** 是否自动级联 */
	auto_cascade: 0 | 1
	/**已上传文件数量 */
	file_num: number
	/** 最后修改时间 */
	last_modify_time: string
	/** 例会规则 */
	meeting_formular?: MeetingFormularData
	/** 会议室搜索规则 */
	meeting_criteria_list: MeetingCriteriaListData[]
	/** 会议室预定情况 */
	room_static?: FetchRoomStatic
	rooms: {
		//暂时无用
		name: string
		region_name: string
		id: number
	}[]
}

/** 保存会议和模板所需参数 */
export interface PublicSaveMeetingParams extends BasicMeetingParams {
	vmp: Vmp
	ai?: AiMtEntity
	tv_wall?: MeetingOrTemplateInterfaceTwallInfo | null
	mix?: MixMtEntity
	poll?: PollMtEntity
	dcs?: DcsParamsEntity
	recorder?: RecorderMtEntity
}

/** 保存会议所需参数 */
export interface SaveMeetingParams extends PublicSaveMeetingParams {
	start_time: string
	brief: string
	sms: 1 | 0
	wechat: 1 | 0
	email: 1 | 0
	meeting_formular?: MeetingFormularData
	meeting_criteria_list: MeetingCriteriaListData[]
	meeting_form_key: string
	prekey: string
}

/** 保存模板所需参数 */
export interface SaveTemplateParams extends PublicSaveMeetingParams {
	conf_level: string
	e164: string
	bitrate: number
	bind_e164: 0 | 1
}

export interface FetchRoomStatic {
	total_num: number
	success_num: number
	failure_num: number
	/** 1-成功 2-部分成功 3-全部不成功 */
	status: number
	data: {
		day?: string
		status?: number
		meeting_form_key?: string
		meeting_rooms?: {
			id?: number
			name?: string
			e164?: string
			region_name: string
			region_id?: number
		}[]
	}
}

export interface MeetingFormularData {
	/** 例会开始日期，yyyy-MM-dd */
	start_date: string
	/** 例会要执行的星期
        1-星期一;
        2-星期二;
        3-星期三;
        4-星期四;
        5-星期五;
        6-星期六;
        0-星期日;
     */
	week_days: string
	/** 例会终止日期，yyyy-MM-dd */
	end_date: string
	/** 例会重复规则，默认星期类型，默认为7 */
	repeat_type: number //固定7
	/** 例会重复频率。默认每周，默认为1 */
	frequency: number //固定1
}

export interface MeetingCriteriaListData {
	/** 区域名称 */
	region_name: string
	/** 设备IDS */
	device_ids: string
	/** 该搜索规则下要搜索的会议室数 */
	num: number
	/** 区域id */
	region_id: number
	/** 人数上限 */
	up_seating: number
	/** 人数下限 */
	down_seating: number
}

export interface FetchMeetingRoom {
	id: number
	name: string
	area: number
	video: 0 | 1
	e164: string
	remark: string
	devices: {
		id: number
		name: string
		remark: string
		icon_url: string
	}[]
	region: number
	status: number
	people_admit: number
	phone_no: string
	device_admin: string
	admin_phone_no: string
	region_name: string
	device_ids: string
	user_domain_moid: string
}

export interface FetchLockMeetingRoom {
	start_time: string
	end_time: string
	region_id: string
	region_name: string
	meeting_room_id: string
	meeting_room_name: string
	virtual_available: number
	meeting_form_key: string
}

export interface FetchDevices {
	id: number
	name: string
	remark: string
	icon_url: string
}

export interface FetchMeetingRoomParams {
	num: number
	day: string
	duration: number
	region_id: number
	device_ids: string
	person_num_lower_limit: string
	person_num_upper_limit: string
	meeting_room_id: string
	region_name: string
	start_time: string
	end_time: string
	meeting_moid: string
}

export interface FetchRepeatInfo {
	frequency: number
	frequency_label: string
	week_days: string
	week_day_labels: string
	end_date: string
	start_time: string
	start_date: string
}

export interface FetchLoadMeetingRoom {
	status: number
	total_num: number
	success_num: number
	failure_num: number
	data: {
		day: string
		status: number
		meeting_form_key?: string
		meeting_rooms: {
			id?: number
			name?: string
			e164?: string
			portrait: string
			region_name: string
			region_id?: number
			big_protrait: string
		}[]
	}[]
}
